import * as XLSX from "xlsx";

export class ExcelHandle {
  /**
   * 解析Excel文件
   * @param file Excel文件
   * @param fields 字段配置
   * @returns Promise<解析结果>
   */
  static parseExcel(file: File, fields: any) {
    return new Promise((resolve, reject) => {
      const reader = new FileReader();
      reader.onload = (res) => {
        try {
          // 获取二进制数据
          const data = new Uint8Array(res?.target?.result as ArrayBuffer);
          // 用xlsx库解析Excel
          const workbook = XLSX.read(data, { type: "array" });
          // 获取第一个工作表名称
          const sheetName = workbook.SheetNames[0];
          // 获取工作表数据
          const worksheet = workbook.Sheets[sheetName];
          // 转换为JSON数据
          const jsonData = XLSX.utils.sheet_to_json(worksheet, {
            header: 1,
            raw: false,
            dateNF: "YYYY-MM-DD",
          }) as any[][];
          resolve(jsonData);
        } catch (error) {
          reject(error);
        }
      };
      reader.onerror = (error) => {
        reject(error);
      };
      reader.readAsArrayBuffer(file);
    });
  }

  /**
   * 导出数据到Excel
   * @param fields 字段配置
   * @param data 数据
   * @param filename 文件名
   */
  static exportDataToExcel(data: any[], fields: any[], filename: string) {
    // 过滤显示字段
    const exportFields = fields.filter(
      (field) => !field.formProps?.hidden && field.key !== "key"
    );

    // 创建表头
    const headers = exportFields.map((field) => field.label);

    // 转换数据
    // const exportData = data.map((item) =>
    //   exportFields.map((field) => {
    //     const value = item[field.key];
    //     if (field.type === FieldType.DATE && value) {
    //       return new Date(value).toLocaleDateString();
    //     }
    //     if (field.type === FieldType.SELECT && field.options) {
    //       const option = field.options.find((opt) => opt.value === value);
    //       return option ? option.label : value;
    //     }
    //     return value || "";
    //   })
    // );

    // 创建工作表数据
    const wsData = [headers, ...data];

    // 创建工作簿和工作表
    const wb = XLSX.utils.book_new();
    const ws = XLSX.utils.aoa_to_sheet(wsData);
    // 添加工作表到工作簿
    XLSX.utils.book_append_sheet(wb, ws, "数据");

    // 下载文件
    XLSX.writeFile(wb, filename);
  }
}
